package datenhaltung;

import java.util.List;

import model.Einweisung;
import model.Geraet;
import model.Geraetetyp;
import model.Mitarbeiter;
import model.Stationsbevollmaechtigter;

/**
 * Interface Datenhaltung
 * 
 * @author Tim Tenbusch
 * @version 61 vom 21.01.2014 Abbildung der Anwendungsf�lle, Umbau OOP, JavaDoc
 * 
 */
public interface IDatenhaltung {

	// Anwendungsf�lle Jeder

	/**
	 * Gibt zu einem Ger�t eine Liste der eingewiesenen Personen aus
	 * 
	 * @param gt
	 *            - Ger�tetyp
	 * @return Liste der Einweisungen
	 */
	public List<Einweisung> liefereEinweisungenZuGeraetetyp(Geraetetyp gt);

	/**
	 * Gibt zu einem Mitarbeiter eine Liste seiner Einweisungen aus
	 * 
	 * @param personalNr
	 *            - Mitarbeiternummer
	 * @return Liste der Einweisungen
	 */
	public List<Einweisung> liefereEinweisungenZuMitarbeiter(String personalNr);

	/**
	 * gibt eine Liste der Gerätetypen mit Pflichteinweisung aus
	 * 
	 * @return Liste der Pflichteinweisungen
	 */
	public List<Geraetetyp> lieferePflichtEinweisung();

	/**
	 * gibt eine Liste der Wunscheinweisungen aus
	 * 
	 * @return Liste der Wunscheinweisungen
	 */
	public List<Geraetetyp> liefereWunschEinweisung();

	/**
	 * �bersicht aller Mitarbeiter der Station
	 * 
	 * @return Liste aller Mitarbeiter
	 */
	public List<Mitarbeiter> liefereMitarbeiter();

	// Anwendungsf�lle Stationsbevollm�chtigter

	/**
	 * gibt den Passworthash zu einem Benutzernamen aus
	 * 
	 * @param personalNr
	 *            - Nutzername
	 * @return Passworthash
	 */
	public String getPasswort(String personalNr);

	/**
	 * �berschreibt das alte Passwort
	 * 
	 * @param personalNr
	 *            - Nutzername
	 * @param pwhashneu
	 *            - neuer Passworthash
	 * @return Erfolgsmeldung
	 */
	public boolean pwAendern(String personalNr, String pwhashneu);

	/**
	 * Eintragen eines neuen autorisierten Stationsbevollm�chtigten
	 * 
	 * @param s
	 *            - Stationsbevollm�chtigten
	 * @param pwhash
	 *            - Passworthash
	 * @return Erfolgsmeldung
	 */
	public boolean neuenBevollmaechtigtenHinzufuegen(Stationsbevollmaechtigter s, String pwhash);

	/**
	 * Erfassen einer neuen Einweisung
	 * 
	 * @param einw
	 *            - Einweisung
	 * @return Erfolgsmeldung
	 */
	public boolean einweisungErfassen(Einweisung einw);

	/**
	 * Markiert eine Einweisung als fehlerhaft, da eine Einweisung aus
	 * Nachweisgr�nden nie gel�scht werden darf Einweisungen d�rfen nicht
	 * gel�scht oder ver�ndert werden
	 * 
	 * @param einw
	 *            - die fehlerhafte Einweisung
	 * @return Erfolgsmeldung
	 */
	public boolean einweisungAlsFehlerhaftMarkieren(Einweisung einw);

	/**
	 * setzt/l�scht ein Ger�t aus der Liste der Pflichteinweisungen
	 * 
	 * @param g
	 *            - der Ger�tetyp
	 * @param status
	 *            - true ->Pflichteinweisung, false ->keine Pflichteinweisung
	 * @return Erfolgsmeldung
	 */
	public boolean setzePflichtEinweisung(Geraetetyp g, boolean status);

	/**
	 * setzt/l�scht ein Ger�t aus der Liste der Wunscheinweisung
	 * 
	 * @param g
	 *            - der Ger�tetyp
	 * @param status
	 *            - true ->Wunscheinweisung, false ->keine Wunscheinweisung
	 * @return Erfolgsmeldung
	 */
	public boolean setzeWunschEinweisung(Geraetetyp g, boolean status);

	/**
	 * neuen Mitarbeiter erfassen
	 * 
	 * @param ma
	 *            - der neue Mitarbeiter
	 * @return Erfolgsmeldung
	 */
	public boolean personalErfassen(Mitarbeiter ma);

	/**
	 * Liste neuer Mitarbeiter erfassen
	 * 
	 * @param ma
	 *            - Mitarbeiterliste
	 * @return Erfolgsmeldung
	 */
	public boolean personalErfassen(List<Mitarbeiter> ma);

	/**
	 * bearbeitet die Daten eines Mitarbeiters
	 * 
	 * @param ma
	 *            - zu �ndernder Mitarbeiter mit den neuen Daten
	 * @return Erfolgsmeldung
	 */
	public boolean personalBearbeiten(Mitarbeiter ma);

	/**
	 * gibt zu einer Personalnummer den Mitarbeiter aus
	 * 
	 * @param personalNr
	 * @return gesuchter Mitarbeiter
	 */
	public Mitarbeiter personalAbfragen(String personalNr);

	// Anwendungsf�lle Medizintechniker

	/**
	 * Liste mit Ger�ten inkl. Ger�tetyp erfassen
	 * 
	 * @param g
	 *            Ger�t mit Ger�tetyp
	 * @return Erfolgsmeldung
	 */
	public boolean geraetErfassen(List<Geraet> g);

	/**
	 * konkretes Ger�t mit Ger�tetyp erfassen
	 * 
	 * @param g
	 *            Ger�t mit Ger�tetyp
	 * @return Erfolgsmeldung
	 */
	public boolean geraetErfassen(Geraet g);

	/**
	 * �ndert Werte zu einem Ger�t
	 * 
	 * @param g
	 *            - das zu ver�ndernde Ger�t
	 * @return Erfolgsmeldung
	 */
	public boolean geraetAktualisieren(Geraet g);

	/**
	 * gibt alle Ger�te zur�ck
	 * 
	 * @return Ger�teliste
	 */
	public List<Geraet> getGeraete();

	/**
	 * gibt alle Ger�tetypen zur�ck
	 * 
	 * @return Ger�tetypenliste
	 */
	public List<Geraetetyp> getGeraetetyp();

}
